/**
 * 简化版权限按钮组件
 * 
 * 基于useSimpleAuth钩子提供的功能，实现简单的权限按钮
 * 不涉及复杂的缓存机制，适合毕业设计使用
 */
import React from 'react';
import { Button, Tooltip, Popconfirm } from 'antd';
import { ButtonProps } from 'antd/lib/button';
import useSimpleAuth from '../../hooks/useSimpleAuth';

interface SimplePermissionButtonProps extends ButtonProps {
  permission?: string;              // 所需权限
  permissions?: string[];           // 权限列表
  requireAll?: boolean;             // 是否需要满足所有权限
  hideOnNoPermission?: boolean;     // 无权限时隐藏
  disableOnNoPermission?: boolean;  // 无权限时禁用
  tooltipTitle?: string;            // 提示文本
  showTooltip?: boolean;            // 是否显示提示
  needConfirm?: boolean;            // 是否需要确认
  confirmTitle?: string;            // 确认标题
  onConfirm?: () => void;           // 确认回调
}

/**
 * 简化版权限按钮组件
 * 根据用户权限自动处理按钮状态
 */
const SimplePermissionButton: React.FC<SimplePermissionButtonProps> = ({
  permission,
  permissions,
  requireAll = false,
  hideOnNoPermission = false,
  disableOnNoPermission = true,
  tooltipTitle = '您没有权限执行此操作',
  showTooltip = true,
  needConfirm = false,
  confirmTitle = '确认执行此操作？',
  onConfirm,
  children,
  ...buttonProps
}) => {
  const { hasPermission } = useSimpleAuth();
  
  // 检查是否有权限
  let hasAccess = false;
  
  try {
    // 检查单个权限
    if (permission) {
      hasAccess = hasPermission(permission);
      console.log(`[按钮权限] ${permission}: ${hasAccess ? '通过' : '拒绝'}`);
    }
    // 检查多个权限
    else if (permissions && permissions.length > 0) {
      if (requireAll) {
        // 需要满足所有权限
        hasAccess = permissions.every(p => hasPermission(p));
        console.log(`[按钮权限] 所有权限: ${permissions.join(',')} - ${hasAccess ? '通过' : '拒绝'}`);
      } else {
        // 满足任意一个权限即可
        hasAccess = permissions.some(p => hasPermission(p));
        console.log(`[按钮权限] 任一权限: ${permissions.join(',')} - ${hasAccess ? '通过' : '拒绝'}`);
      }
    }
    // 没有指定权限，默认允许
    else {
      hasAccess = true;
      console.log('[按钮权限] 无需权限，默认通过');
    }
  } catch (error) {
    // 错误处理 - 避免权限检查失败导致UI崩溃
    console.error('[按钮权限] 检查失败:', error);
    hasAccess = false; // 发生错误时默认禁用按钮
  }
  
  // 如果没有权限且需要隐藏
  if (!hasAccess && hideOnNoPermission) {
    return null;
  }
  
  // 创建按钮
  const button = (
    <Button
      {...buttonProps}
      disabled={(!hasAccess && disableOnNoPermission) || buttonProps.disabled}
    >
      {children}
    </Button>
  );
  
  // 如果需要确认且有权限
  if (needConfirm && hasAccess) {
    return (
      <Popconfirm
        title={confirmTitle}
        onConfirm={onConfirm}
      >
        {button}
      </Popconfirm>
    );
  }
  
  // 如果无权限且需要提示
  if (!hasAccess && showTooltip) {
    return (
      <Tooltip title={tooltipTitle}>
        {button}
      </Tooltip>
    );
  }
  
  // 普通按钮
  return button;
};

export default SimplePermissionButton; 